﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using SIGEB.Prototipo.Control;
using SIGEB.Prototipo.Vista.moduloUsuarios;
using SIGEB.Prototipo.Vista.moduloDocumentos;
using SIGEB.Prototipo.Vista.moduloNotificaciones;
using SIGEB.Prototipo.Vista.moduloPrestamosDevoluciones;
using SIGEB.Prototipo.Vista.moduloEstadisticas;
using SIGEB.Prototipo.Vista.moduloMultas;
using SIGEB.Prototipo.Vista.moduloGrupo;
using SIGEB.Prototipo.Vista.moduloPerfiles;
using SIGEB.Prototipo.Vista.moduloComputadoras;
using SIGEB.Prototipo.Vista.moduloTipoDocumentos;
using SIGEB.Prototipo.Vista.moduloConsulta;
using SIGEB.Prototipo.Vista.moduloTipoUsuario;
using SIGEB.Prototipo.Vista.UI;
using SIGEB.Prototipo.Vista.configuracionAvanzada;
using SIGEB.Modelo.moduloPerfiles;
using SIGEB.Modelo;

namespace SIGEB.Prototipo.Vista
{
    public partial class frm_Principal : frm_Base
    {
        #region CONSTRUCTORES
        
        public frm_Principal()
        {
            InitializeComponent(); 
        }

        public frm_Principal(controlPrincipal cp):base(cp)
        {
            Splash sp = new Splash(cp);
            sp.ShowDialog();

            this.cp = cp;
            InitializeComponent();

            inicializarVentana();
        }

        private void inicializarVentana()
        {
            asignarUI(this.Controls);

            Color color = Color.Transparent;

            this.btn_circulacion.Cargar(SIGEB.Prototipo.Properties.Resources.circulacion, color);
            btn_circulacion.Click += new EventHandler(btn_circulacion_Click);
            this.btn_documentos.Cargar(SIGEB.Prototipo.Properties.Resources.documentos, color);
            btn_documentos.Click += new EventHandler(btn_documentos_Click);
            this.btn_consulta.Cargar(SIGEB.Prototipo.Properties.Resources.consulta, color);
            btn_consulta.Click += new EventHandler(btn_consulta_Click);
            this.btn_usuarios.Cargar(SIGEB.Prototipo.Properties.Resources.usuarios, color);
            btn_usuarios.Click += new EventHandler(btn_usuarios_Click);
            this.btn_notificaciones.Cargar(SIGEB.Prototipo.Properties.Resources.notificaciones, color);
            btn_notificaciones.Click += new EventHandler(btn_notificaciones_Click);
            this.btn_estadisticas.Cargar(SIGEB.Prototipo.Properties.Resources.estadisticas, color);
            btn_estadisticas.Click += new EventHandler(btn_estadisticas_Click);
            this.btn_computadoras.Cargar(SIGEB.Prototipo.Properties.Resources.computadoras, color);
            btn_computadoras.Click += new EventHandler(btn_computadoras_Click);
            this.btn_configuracion.Cargar(SIGEB.Prototipo.Properties.Resources.configuracion, color);
            btn_configuracion.Click += new EventHandler(btn_configuracion_Click);

            this.btn_tipo_documento.Cargar(SIGEB.Prototipo.Properties.Resources.tipo_documento, color);
            btn_tipo_documento.Click += new EventHandler(btn_tipo_documento_Click);
            this.btn_tipo_usuario.Cargar(SIGEB.Prototipo.Properties.Resources.tipo_usuario, color);
            btn_tipo_usuario.Click += new EventHandler(btn_tipo_usuario_Click);
            this.btn_tipo_perfil.Cargar(SIGEB.Prototipo.Properties.Resources.tipo_perfil, color);
            btn_tipo_perfil.Click += new EventHandler(btn_tipo_perfil_Click);
            this.btn_grupos.Cargar(SIGEB.Prototipo.Properties.Resources.grupos, color);
            btn_grupos.Click += new EventHandler(btn_grupos_Click);
            this.btn_regresar.Cargar(SIGEB.Prototipo.Properties.Resources.regresar, color);
            btn_regresar.Click += new EventHandler(btn_regresar_Click);

            mni_IniciarSesion = new MenuItem("Cerrar Sesión...", new EventHandler(mni_CerrarSesion_Click), Shortcut.CtrlShiftN);
            mni_OcultarTodo = new MenuItem("Ocultar Ventanas", new EventHandler(mni_OcultarTodo_Click), Shortcut.Alt0);
            mni_Salir = new MenuItem("Salir", new EventHandler(mni_Salir_Click), Shortcut.AltF4);
            mni_ConfiguracionAvanzada = new MenuItem("Configuración Avanzada...", new EventHandler(mni_ConfiguracionAvanzada_Click), Shortcut.Alt1);

            mni_Archivo = new MenuItem("Archivo");
            mni_Ventana = new MenuItem("Ventana");
            mni_Configuracion = new MenuItem("Configuración");

            mni_Archivo.MenuItems.Add(mni_IniciarSesion);
            mni_Archivo.MenuItems.Add("-");
            mni_Archivo.MenuItems.Add(mni_Salir);
            mni_Ventana.MenuItems.Add(mni_OcultarTodo);
            mni_Configuracion.MenuItems.Add(mni_ConfiguracionAvanzada);

            mmn_Principal = new MainMenu();
            mmn_Principal.MenuItems.Add(mni_Archivo);
            mmn_Principal.MenuItems.Add(mni_Configuracion);
            mmn_Principal.MenuItems.Add(mni_Ventana);

            Menu = mmn_Principal;

            modoConfiguracionAvanzada = false;

            btn_circulacion.Location = new Point(274, 74);
            btn_documentos.Location = new Point(274 + 136, 74);
            btn_consulta.Location = new Point(274 + 272, 74);
            btn_usuarios.Location = new Point(274 + 408, 74);

            btn_notificaciones.Location = new Point(274, 260);
            btn_estadisticas.Location = new Point(274 + 136, 260);
            btn_computadoras.Location = new Point(274 + 272, 260);
            btn_configuracion.Location = new Point(274 + 408, 260);

            btn_tipo_documento.Location = new Point(274, 74);
            btn_tipo_usuario.Location = new Point(274 + 136, 74);
            btn_tipo_perfil.Location = new Point(274 + 272, 74);
            btn_grupos.Location = new Point(274 + 408, 74);

            btn_regresar.Location = new Point(274 + 408, 260);
        }

        #endregion

        #region MÉTODOS

        public override void actualizar(object referencia, bibliotecaObservador.EventoActualizacion e)
        {
            int tipo = (int)referencia;
            if (tipo == conjuntoBase.CONJUSUARIOS || tipo == conjuntoBase.CONJTIPOSPERFIL)
            {
                actualizarBotones();
            }
        }

        public override void hacerVisible(object[] arg)
        {
            actualizarBotones();
        }

        private void actualizarBotones()
        {
            btn_circulacion.Enabled = cp.usuarioActualPuede(acciones.PRESTA_CONSULTA_ACT) || cp.usuarioActualPuede(acciones.PRESTA_CONSULTA_TOD) || cp.usuarioActualPuede(acciones.PRESTA_DEVOLVER) || cp.usuarioActualPuede(acciones.PRESTA_ELIMINAR) ||
                cp.usuarioActualPuede(acciones.PRESTA_MODIFICAR) || cp.usuarioActualPuede(acciones.PRESTA_REGISTRAR);
            btn_computadoras.Enabled = cp.usuarioActualPuede(acciones.PC_APAGAR);
            btn_consulta.Enabled = cp.usuarioActualPuede(acciones.CONSULTA_CONSULTAR);
            btn_documentos.Enabled = cp.usuarioActualPuede(acciones.DOCS_AGREGAR) || cp.usuarioActualPuede(acciones.DOCS_CONSULTAR) || cp.usuarioActualPuede(acciones.DOCS_ELIMINAR) ||
                cp.usuarioActualPuede(acciones.DOCS_MODIFICAR);
            btn_estadisticas.Enabled = cp.usuarioActualPuede(acciones.ESTADISTICA_TOD) || cp.usuarioActualPuede(acciones.ESTADISTICA_ACT);
            btn_grupos.Enabled = cp.usuarioActualPuede(acciones.GRUPOS_AGREGAR) || cp.usuarioActualPuede(acciones.GRUPOS_CONSULTAR_TODOS) || cp.usuarioActualPuede(acciones.GRUPOS_ELIMINAR) ||
                cp.usuarioActualPuede(acciones.GRUPOS_MODIFICAR_TODOS);
            btn_notificaciones.Enabled = cp.usuarioActualPuede(acciones.NOTIFICACION_ENVIAR);
            btn_tipo_documento.Enabled = cp.usuarioActualPuede(acciones.TIPODOC_AGREGAR) || cp.usuarioActualPuede(acciones.TIPODOC_CONSULTAR) || cp.usuarioActualPuede(acciones.TIPODOC_ELIMINAR) ||
                cp.usuarioActualPuede(acciones.TIPODOC_MODIFICAR);
            btn_tipo_perfil.Enabled = cp.usuarioActualPuede(acciones.TIPERF_AGREGAR) || cp.usuarioActualPuede(acciones.TIPERF_CONSULTAR) || cp.usuarioActualPuede(acciones.TIPERF_ELIMINAR)
                || cp.usuarioActualPuede(acciones.TIPERF_MODIFICAR);
            btn_tipo_usuario.Enabled=cp.usuarioActualPuede(acciones.TIPUSR_AGREGAR)||cp.usuarioActualPuede(acciones.TIPUSR_CONSULTAR)||cp.usuarioActualPuede(acciones.TIPUSR_ELIMINAR)||
                cp.usuarioActualPuede(acciones.TIPUSR_MODIFICAR);
            btn_usuarios.Enabled=cp.usuarioActualPuede(acciones.USER_CONSULTAR_ACT)||cp.usuarioActualPuede(acciones.USER_CONSULTAR_TOD)||cp.usuarioActualPuede(acciones.USER_ELIMINAR)||
                cp.usuarioActualPuede(acciones.USER_MODIFICAR_ACT)||cp.usuarioActualPuede(acciones.USER_MODIFICAR_TOD)||cp.usuarioActualPuede(acciones.USRS_AGREGAR);
            
        }

        #endregion

        #region EVENTOS

        private void btn_configuracion_Click(object sender, EventArgs e)
        {
            mostrarConfiguracion();
        }

        private void mostrarConfiguracion()
        {
            if (!modoConfiguracionAvanzada)
            {
                btn_circulacion.Visible = false;
                btn_documentos.Visible = false;
                btn_consulta.Visible = false;
                btn_usuarios.Visible = false;
                btn_notificaciones.Visible = false;
                btn_estadisticas.Visible = false;
                btn_computadoras.Visible = false;
                btn_configuracion.Visible = false;

                btn_tipo_documento.Visible = true;
                btn_tipo_usuario.Visible = true;
                btn_tipo_perfil.Visible = true;
                btn_grupos.Visible = true;
                btn_regresar.Visible = true;

                modoConfiguracionAvanzada = true;
            }
        }

        private void ocultarConfiguracion()
        {
            if (modoConfiguracionAvanzada)
            {
                btn_circulacion.Visible = true;
                btn_documentos.Visible = true;
                btn_consulta.Visible = true;
                btn_usuarios.Visible = true;
                btn_notificaciones.Visible = true;
                btn_estadisticas.Visible = true;
                btn_computadoras.Visible = true;
                btn_configuracion.Visible = true;

                btn_tipo_documento.Visible = false;
                btn_tipo_usuario.Visible = false;
                btn_tipo_perfil.Visible = false;
                btn_grupos.Visible = false;
                btn_regresar.Visible = false;

                modoConfiguracionAvanzada = false;
            }
        }

        private void btn_regresar_Click(object sender, EventArgs e)
        {
            ocultarConfiguracion();
        }

        private void btn_grupos_Click(object sender, EventArgs e)
        {
            cp.abrirVentana(this, controlPrincipal.VENTANA_GRUPOS, null);
        }

        private void btn_tipo_perfil_Click(object sender, EventArgs e)
        {
            cp.abrirVentana(this, controlPrincipal.VENTANA_PERFILES, null);
        }

        private void btn_tipo_usuario_Click(object sender, EventArgs e)
        {
            cp.abrirVentana(this, controlPrincipal.VENTANA_TIPO_USUARIO, null);
        }

        void btn_tipo_documento_Click(object sender, EventArgs e)
        {
            cp.abrirVentana(this, controlPrincipal.VENTANA_TIPODOCUMENTO, null);
        }

        private void btn_computadoras_Click(object sender, EventArgs e)
        {
            cp.abrirVentana(this, controlPrincipal.VENTANA_COMPUTADORAS, null);
        }

        private void btn_estadisticas_Click(object sender, EventArgs e)
        {
            cp.abrirVentana(this, controlPrincipal.VENTANA_ESTADISTICA, null);
        }

        private void btn_notificaciones_Click(object sender, EventArgs e)
        {
            cp.abrirVentana(this, controlPrincipal.VENTANA_NOTIFICACIONES, null);
        }

        private void btn_usuarios_Click(object sender, EventArgs e)
        {
            cp.abrirVentana(this, controlPrincipal.VENTANA_USUARIO, null);
        }

        private void btn_consulta_Click(object sender, EventArgs e)
        {
            cp.abrirVentana(this, controlPrincipal.VENTANA_CONSULTA, null);
        }

        private void btn_documentos_Click(object sender, EventArgs e)
        {
            cp.abrirVentana(this, controlPrincipal.VENTANA_DOCUMENTOS, null);
        }

        private void btn_circulacion_Click(object sender, EventArgs e)
        {
            cp.abrirVentana(this, controlPrincipal.VENTANA_PRESTAMO_DEVOLUCION, null);
        }

        private void mni_CerrarSesion_Click(object sender, EventArgs e)
        {
            cp.cerrarTodasVentanas();
            Hide();
            abrirLogonWindow();
            Show();
        }

        private void mni_OcultarTodo_Click(object sender, EventArgs e)
        {
            cp.cerrarTodasVentanas();
        }

        private void mni_Salir_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void mni_ConfiguracionAvanzada_Click(object sender, EventArgs e)
        {
            mostrarConfiguracion();
        }

        private void btn_moduloMultas_Click(object sender, EventArgs e)
        {
            cp.abrirVentana(this, controlPrincipal.VENTANA_MULTAS, null);
        }

        private void btn_moduloGruposAreas_Click(object sender, EventArgs e)
        {
            cp.abrirVentana(this, controlPrincipal.VENTANA_GRUPOS,null);
        }

        private void btn_moduloPerfiles_Click(object sender, EventArgs e)
        {
            cp.abrirVentana(this, controlPrincipal.VENTANA_PERFILES,null);
        }

        private void btn_moduloTiposUsuario_Click(object sender, EventArgs e)
        {
            cp.abrirVentana(this, controlPrincipal.VENTANA_TIPO_USUARIO, null);
        }

        private void frm_Principal_Load(object sender, EventArgs e)
        {
            btn_circulacion.Visible = true;
            btn_documentos.Visible = true;
            btn_consulta.Visible = true;
            btn_usuarios.Visible = true;
            btn_notificaciones.Visible = true;
            btn_estadisticas.Visible = true;
            btn_computadoras.Visible = true;
            btn_configuracion.Visible = true;
            abrirLogonWindow();
            actualizarBotones();
        }

        private void abrirLogonWindow()
        {
            new frm_Login(cp).ShowDialog();
        }


        protected override void CerrarVentana(object sender, FormClosingEventArgs e)
        {
            if (confirmarCierre())
            {
                btn_circulacion.Visible = false;
                btn_documentos.Visible = false;
                btn_consulta.Visible = false;
                btn_usuarios.Visible = false;

                btn_notificaciones.Visible = false;
                btn_estadisticas.Visible = false;
                btn_computadoras.Visible = false;
                btn_configuracion.Visible = false;

                btn_tipo_documento.Visible = false;
                btn_tipo_usuario.Visible = false;
                btn_tipo_perfil.Visible = false;
                btn_grupos.Visible = false;

                btn_regresar.Visible = false;

                Application.ExitThread();
            }
            else
                e.Cancel = true;
        }

        #endregion

        #region ATRIBUTOS
        private bool modoConfiguracionAvanzada;

        private MenuItem mni_IniciarSesion;
        private MenuItem mni_Salir;
        private MenuItem mni_Archivo;
        private MenuItem mni_Ventana;
        private MenuItem mni_OcultarTodo;
        private MenuItem mni_Configuracion;
        private MenuItem mni_ConfiguracionAvanzada;


        private MainMenu mmn_Principal;

        #endregion
    }
}
    